abstract class AbstractNode {
    abstract var id: String
    abstract val url: String
    abstract val tags: MutableList<AbstractNode> // 使用自身类型的列表来表示标签
    abstract val children: MutableList<AbstractNode> // 使用自身类型的列表来表示子节点
    abstract val outgoingEdges: MutableList<Edge>
    abstract  val incomingEdges: MutableList<Edge>

    // Add a child node
    fun addChild(child: AbstractNode) {
        children.add(child)
    }

    // Remove a child node
    fun removeChild(child: AbstractNode) {
        children.remove(child)
    }

    // Add an edge
    fun addOutgoingEdge(edge: Edge) {
        outgoingEdges.add(edge)
    }

    // Remove an edge
    fun removeOutgoingEdge(edge: Edge) {
        outgoingEdges.remove(edge)
    }

    // Add a tag
    fun addTag(tag: AbstractNode) {
        tags.add(tag)
    }

    // Remove a tag
    fun removeTag(tag: AbstractNode) {
        tags.remove(tag)
    }
}

